#ifndef goldelox_h
#define goldelox_h
#include "NewSoftSerial.h"
#include <math.h>
#include "WProgram.h"
#include "HardwareSerial.h"
#include <Time.h>


//#define GOLDELOX_DEBUG
#define SOFTSERIAL

#ifndef SOFTSERIAL
#undef GOLDELOX_DEBUG
#endif

class goldelox 
{
	private:
#ifdef SOFTSERIAL
		NewSoftSerial *_serial;
#else
		HardwareSerial  *_serial;
#endif
	public:
		
		char  buffer[10];
		goldelox();
#ifdef SOFTSERIAL
		void init(NewSoftSerial *serial);
#else
		void init(HardwareSerial *serial);
#endif
		void init2();
		byte CMD(char* c,int n);
		void powerON();
		void powerOFF();
		void lowPower();
		void normalPower();
		void sleep();
		void putPixel(int x,int y,int color);
		void text(int x,int y,char* c,int color);
		void text(int x,int y,char* c,int color,int scale);
		void text(int x,int y,int v,int color);
		void text(int x,int y,uint16_t v,int color);
		void text(int x,int y,uint32_t v,int color);
		void text(int x,int y,float v,int color);
		void opaqueText();
		void transparentText();

		byte readByte(unsigned long address);

		byte readByte();
		void writeByte(unsigned long address,byte byte);
		void imageToSD(int x,int y, int width,int height,unsigned long address);
		void showImage(unsigned long n);
		void showImage(int x,int y,int width,int height,unsigned long address);
		void copyPaste(int x0,int y0, int x1,int y1,int width,int height);
		void cutPaste(int x0,int y0, int x1,int y1,int width,int height);
		void showVideo(int frames,unsigned long address);
		void showVideo(int x,int y, int width,int height,int frames,unsigned long address);
		void changeColor(int x0,int y0, int x1,int y1,int color,int to_color);
		void rectangle(int x0,int y0, int x1,int y1,int color);
		void line(int x0,int y0, int x1,int y1,int color);
		void circle(int x,int y, int r,int color);
		void polygon(int vertices,char v[],int color);
		void arrow(int t);
		void about();
		void test0();
		void nivel(int an);
		void test1();
		void version();
		void clear();
		void black();
		void penSolid();
		void penWire();
		void test2();
		int getRGB(int red, int green, int blue);
		void setSDpointer(unsigned long address);

		void testReadByte();
		void testCopyPaste();
		void sound(int f,int d);

	
};



class goldeloxPlus: public goldelox
{
	public:
		goldeloxPlus();
		void thermo(int x,int y,int color,int size,float T);
		void showClock();
		void showDate(int x,int y,int color);
		void showTime(int x,int y,int color);
		void showHHMMSS(int x,int y,float a,int color);	
};	

#endif


